package org.wu.framework.lazy.orm.database.lambda.stream.lambda.insert;


import org.wu.framework.translation.data.LayerDataAnalyzeAdapter;

import java.util.Map;

/**
 * description insert
 *
 * @author Jia wei Wu
 * @date 2022/12/30 6:01 下午
 */
public interface SimpleInsertLambdaStream extends LayerDataAnalyzeAdapter {


    /**
     * describe upsert
     *
     * @param save 存储对象
     * @author Jia wei Wu
     * @date 2022/1/20 8:44 下午
     **/
    <T> void upsert(T save);

    /**
     * describe 更新或者插入单个执行 去除空值
     *
     * @param save 操作的对象
     *             返回的数据 void
     * @author Jia wei Wu
     * @date 2022/1/20 8:44 下午
     **/
    <T> void upsertRemoveNull(T save);

    /**
     * 数据插入
     *
     * @param save 存储对象
     * @param <T>  存储对象范型
     */
    <T> void insert(T save);

    /**
     * 数据插入、更新
     *
     * @param save 存储对象
     * @param <T>  存储对象范型
     */
    <T> void saveOrUpdate(T save);


    /**
     * 弱数据插入 upsert
     *
     * @param schema 数据库
     * @param table  表
     * @param save   存储对象
     * @author Jia wei Wu
     * @date 2022/1/20 8:44 下午
     * <p>
     *     if you want cure the table with update it or create please use the next line code
     *     SourceFactory.defaultAnalyzeLazyTableFromMap(tableName,bean)
     * </p>
     **/
    <T> void weakUpsert(String schema, String table, Object save);

    /**
     * 弱数据插入 upsert
     *
     * @param table 表
     * @param save  存储对象
     * @author Jia wei Wu
     * @date 2022/1/20 8:44 下午
     * <p>
     *     if you want cure the table with update it or create please use the next line code
     *     SourceFactory.defaultAnalyzeLazyTableFromMap(tableName,bean)
     * </p>
     **/
    default <T> void weakUpsert(String table, Object save) {
        weakUpsert(null, table, save);
    }


    /**
     * 弱数据插入
     *
     * @param schema 数据库
     * @param table  表
     * @param save   存储对象
     * @param <T>    存储对象范型
     * <p>
     *     if you want cure the table with update it or create please use the next line code
     *     SourceFactory.defaultAnalyzeLazyTableFromMap(tableName,bean)
     * </p>
     */
    <T> void weakInsert(String schema, String table, Object save);

    /**
     * 弱数据插入
     *
     * @param table 表
     * @param save  存储对象
     * @param <T>   存储对象范型
     *              <p>
     *              if you want cure the table with update it or create please use the next line code
     *              SourceFactory.defaultAnalyzeLazyTableFromMap(tableName,bean)
     *              </p>
     */
    default <T> void weakInsert(String table, Object save) {
        weakInsert(null, table, save);
    }


}
